const log4js = require('log4js');

Date.prototype.format = function (fmt) { //author: meizz
    let o = {
        "M+": this.getMonth() + 1, //月份
        "d+": this.getDate(), //日
        "h+": this.getHours(), //小时
        "m+": this.getMinutes(), //分
        "s+": this.getSeconds(), //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (let k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
};

log4js.configure({

    appenders: {
        success: {
            type: 'dateFile',
            filename: './logs/info',
            pattern: 'yyyy-MM-dd.log',
            alwaysIncludePattern: true
        },
        err: {
            type: 'dateFile',
            filename: './logs/error',
            pattern: 'yyyy-MM-dd.log',
            alwaysIncludePattern: true
        }
    },

    categories: {
        default: {
            appenders: ['success'],
            level: 'info'
        },
        error: {
            appenders: ['err'],
            level: 'error'
        }

    }
});

let logs;

module.exports = (app) => {

    if (logs) {

        console.log('logs already exists');

        app.logger = logs;

        return;
    }

    class logger {

        successLogger;
        errorLogger;

        constructor() {

            this.successLogger = log4js.getLogger();

            this.errorLogger = log4js.getLogger('error');

        }

        error(message, ...args) {
            this.errorLogger.error(message, ...args);
        }

        info(message, ...args) {
            this.successLogger.info(message, ...args);
        }

        debug(message, ...args) {
            const date = new Date().format("yyyy-MM-dd hh:mm:ss");
            message = `[${date}] [DEBUG] ${message}`;
            console.log(message, ...args);
        }

    }

    logs = new logger();

    app.logger = logs;

};
